
#include "userinit.h"

void System_CLK_Init(void)
{
	FL_RCC_RCHF_Enable();

    FL_RCC_RCHF_SetFrequency(FL_RCC_RCHF_FREQUENCY_24MHZ);
    FL_RCC_RCHF_WriteTrimValue(RCHF24M_TRIM);
    FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_0CYCLE);      // <24M,0 WAIT CYCLE

    FL_RCC_SetSystemClockSource(FL_RCC_SYSTEM_CLK_SOURCE_RCHF);
    FL_RCC_SetAHBPrescaler(FL_RCC_AHBCLK_PSC_DIV1);
    FL_RCC_SetAPB1Prescaler(FL_RCC_APB1CLK_PSC_DIV1);
    FL_RCC_SetAPB2Prescaler(FL_RCC_APB2CLK_PSC_DIV1);
}

void BaseTimeInit(void)
{
    FL_ATIM_InitTypeDef    TimerBaseInitStruct;

    TimerBaseInitStruct.clockSource = FL_RCC_ATIM_CLK_SOURCE_APB2CLK;
    TimerBaseInitStruct.prescaler = 24 - 1;
    TimerBaseInitStruct.counterMode = FL_ATIM_COUNTER_DIR_UP;
    TimerBaseInitStruct.autoReload = 5000;	// 5ms
    TimerBaseInitStruct.autoReloadState = FL_DISABLE;
    TimerBaseInitStruct.clockDivision = FL_ATIM_CLK_DIVISION_DIV1;
    TimerBaseInitStruct.repetitionCounter = 0;

    FL_ATIM_Init(ATIM, &TimerBaseInitStruct);
    FL_ATIM_ClearFlag_Update(ATIM);
    FL_ATIM_EnableIT_Update(ATIM);

	FL_NVIC_ConfigTypeDef    InterruptConfigStruct;

    InterruptConfigStruct.preemptPriority = 0x00;
    FL_NVIC_Init(&InterruptConfigStruct, ATIM_IRQn);

    //使能ATIM
    FL_ATIM_Enable(ATIM);

}

void GPIO_Init(void)
{
    FL_GPIO_InitTypeDef    GPIO_InitStruct;

    GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull       = FL_ENABLE;
    GPIO_InitStruct.remapPin   = FL_DISABLE;
	
	GPIO_InitStruct.mode       = FL_GPIO_MODE_INPUT;

	//SW1_1
	GPIO_InitStruct.pin        = FL_GPIO_PIN_8;
    FL_GPIO_Init(GPIOC, &GPIO_InitStruct);

	//SW1_2
	GPIO_InitStruct.pin 	   = FL_GPIO_PIN_9;
	FL_GPIO_Init(GPIOD, &GPIO_InitStruct);

	//SW1_3
	GPIO_InitStruct.pin        = FL_GPIO_PIN_9;
    FL_GPIO_Init(GPIOC, &GPIO_InitStruct);

	//SW1_4
	GPIO_InitStruct.pin        = FL_GPIO_PIN_10;
    FL_GPIO_Init(GPIOC, &GPIO_InitStruct);

	//SW2
	GPIO_InitStruct.pin        = FL_GPIO_PIN_10;
    FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
	
	//SW3
	GPIO_InitStruct.pin        = FL_GPIO_PIN_2;
    FL_GPIO_Init(GPIOB, &GPIO_InitStruct);

	//SW4
	GPIO_InitStruct.pin        = FL_GPIO_PIN_3;
    FL_GPIO_Init(GPIOB, &GPIO_InitStruct);

	//SW5
	GPIO_InitStruct.pin        = FL_GPIO_PIN_4;
    FL_GPIO_Init(GPIOB, &GPIO_InitStruct);

	//SW6
	GPIO_InitStruct.pin        = FL_GPIO_PIN_5;
    FL_GPIO_Init(GPIOB, &GPIO_InitStruct);

	//SW7
	GPIO_InitStruct.pin        = FL_GPIO_PIN_8;
    FL_GPIO_Init(GPIOB, &GPIO_InitStruct);

	//SW8
	GPIO_InitStruct.pin        = FL_GPIO_PIN_9;
    FL_GPIO_Init(GPIOA, &GPIO_InitStruct);

	// 输出
	GPIO_InitStruct.mode       = FL_GPIO_MODE_OUTPUT;

	// LED_D
	GPIO_InitStruct.pin        = FL_GPIO_PIN_7;
    FL_GPIO_Init(GPIOA, &GPIO_InitStruct);

	// LED_W
	GPIO_InitStruct.pin        = FL_GPIO_PIN_8;
    FL_GPIO_Init(GPIOA, &GPIO_InitStruct);

	// DIN
	GPIO_InitStruct.pin        = FL_GPIO_PIN_10;
    FL_GPIO_Init(GPIOB, &GPIO_InitStruct);

	// SCLK 
	GPIO_InitStruct.pin        = FL_GPIO_PIN_9;
    FL_GPIO_Init(GPIOB, &GPIO_InitStruct);

}

void Wifi_Uart4_Init(void)
{
	FL_GPIO_InitTypeDef    GPIO_InitStruct;

    FL_UART_InitTypeDef    defaultInitStruct;

    GPIO_InitStruct.pin = FL_GPIO_PIN_0;
    GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
    GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull = FL_ENABLE;
    GPIO_InitStruct.remapPin = FL_DISABLE;
    FL_GPIO_Init(GPIOA, &GPIO_InitStruct);	// RX

    GPIO_InitStruct.pin        = FL_GPIO_PIN_1;
    GPIO_InitStruct.mode       = FL_GPIO_MODE_DIGITAL;
    GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull       = FL_DISABLE;
    GPIO_InitStruct.remapPin   = FL_DISABLE;
    FL_GPIO_Init(GPIOA, &GPIO_InitStruct);	// TX

    defaultInitStruct.clockSrc          = FL_RCC_UART0_CLK_SOURCE_APB1CLK;
    defaultInitStruct.baudRate          = 115200;
    defaultInitStruct.dataWidth         = FL_UART_DATA_WIDTH_8B;
    defaultInitStruct.stopBits          = FL_UART_STOP_BIT_WIDTH_1B;
    defaultInitStruct.parity            = FL_UART_PARITY_EVEN;
    defaultInitStruct.transferDirection = FL_UART_DIRECTION_TX_RX;

    FL_UART_Init(UART4, &defaultInitStruct);

	FL_NVIC_ConfigTypeDef    InterruptConfigStruct;

    InterruptConfigStruct.preemptPriority = 2;
    FL_NVIC_Init(&InterruptConfigStruct, UART4_IRQn);

    FL_UART_ClearFlag_RXBuffFull(UART4);
    FL_UART_EnableIT_RXBuffFull(UART4);           //使能接收中断
}

void UserInit(void)
{
	System_CLK_Init();
	BaseTimeInit();

	GPIO_Init();
	Wifi_Uart4_Init();
	
}

